#include <stdio.h>
#include <stdbool.h>
#define Max 100
#define ElementType int

typedef struct 
{
    ElementType arr[Max];
    int len;   
}Stack;

void InitStack(Stack *s)
{
    for(int i = 0; i < Max; i++)
    {
        s->arr[i] = 0;
    }

    s->len = 0;
}

void Travel(Stack *s)
{
    for(int i = 0; i < s->len; i++)
    {
        printf("%d ",s->arr[i]);
    }
    printf("\n");
}

//入栈
void Push(Stack *s,ElementType element)
{
    if(s->len >= Max)
    {
        printf("栈满！\n");
        return;
    }
    s->arr[s->len++] = element;
}

//出栈
void Pop(Stack *s)
{
    if(s->len == 0)
    {
        printf("栈空！\n");
        return;
    }

    s->len--;
}

//获取栈顶元素
ElementType* GetTop(Stack *s)
{
    if(s->len == 0)
    {
        printf("栈空\n");
        return NULL;
    }

    return &s->arr[s->len - 1];
}

//判断栈是否为空
bool IsStackEmpty(Stack *s)
{
    return s->len == 0;
}

int main()
{

    Stack s;
    InitStack(&s);

    // for(int i = 0; i < 10; i++)
    // {
    //     Push(&s,i+1);
    // }

    // Travel(&s);

    // while(IsStackEmpty(&s) == false)
    // {
    //     //获取栈顶元素
    //     printf("%d ",*GetTop(&s));
    //     //出栈
    //     Pop(&s);
    // }
    // printf("\n");

    //进制转换器
    int num = 0;
    int n = 0;
    printf("请输入你要转换的数:");
    scanf("%d",&num);
    printf("请输入你要转换的进制:");
    scanf("%d",&n);
    
    while(num != 0)
    {
        int temp = num % n;
        if(temp < 10)
            temp = temp + '0';
        else
            temp = temp - 10 + 'a';
        
        Push(&s,temp);
        num /= n;
    }
    while(IsStackEmpty(&s) == false)
    {
        printf("%c",*GetTop(&s));
        Pop(&s);
    }

   
    printf("\n");
    return 0;
}